package dawn.jxufe.community.util;

/**
 * @author dawn21
 * @version 1.0
 * @date 2022/8/7 11:13
 * @component
 */
// 不使用spring容器来管理，直接声明静态方法，直接导包调用。
public class RedisKeyUtil {
    private static final String SPLIT = ":";
    // 帖子和评论的赞都称为实体。存实体的赞。实体的赞以某一个前缀来开头。
    private static final String PREFIX_ENTITY_LIKE = "like:entity"; // :只是一个连接符相当于_。前缀。
    private static final String PREFIX_USER_LIKE = "user:like"; // 用户的赞的前缀。
    private static final String PREFIX_FOLLOWEE = "followee"; // 目标
    private static final String PREFIX_FOLLOWER = "follower"; // 粉丝
    private static final String PREFIX_KAPTCHA = "kaptcha"; // 验证码
    private static final String PREFIX_TICKET = "ticket"; // 登录凭证
    private static final String PREFIX_USER = "user"; // 用户信息
    private static final String PREFIX_UV = "uv"; // 独立访客
    private static final String PREFIX_DAU = "dau"; // 日活跃用户
    private static final String PREFIX_POST = "post"; // 帖子热度排行

    // 声明一个静态方法，要求传入一个变量，拼成一个完整的key。某个实体的赞这个key。
    // like:entity:entityType:entityId -> value:set(userId)
    public static String getEntityLikeKey(int entityType, int entityId) {
        return PREFIX_ENTITY_LIKE + SPLIT + entityType + SPLIT + entityId;
    }

    // 某个用户的赞
    // like:user:userId - > int
    public static String getUserLikeKey(int userId) {
        return PREFIX_USER_LIKE + SPLIT + userId;
    }

    // 某个用户关注的实体。followee:userId:entityType -> zset(entityId,now)
    public static String getFolloweeKey(int userId, int entityType) {
        return PREFIX_FOLLOWEE + SPLIT + userId + SPLIT + entityType;
    }

    // 某个实体的粉丝。follower:entityType:entityId -> zset(userId,now)
    public static String getFollowerKey(int entityType, int entityId) {
        return PREFIX_FOLLOWER + SPLIT + entityType + SPLIT + entityId;
    }

    // 登录验证码，在用户访问登录页面时，生成一个登录凭证(字符串)，存到cookie里面，以这个字符串标识用户，然后很快让它过期。
    public static String getKaptchaKey(String owner) {
        return PREFIX_KAPTCHA + SPLIT + owner;
    }

    // 登录的凭证
    public static String getTicketKey(String ticket) {
        return PREFIX_TICKET + SPLIT + ticket;
    }

    // 用户
    public static String getUserKey(int userId) {
        return PREFIX_USER + SPLIT + userId;
    }

    // 单日UV
    public static String getUVKey(String date) {
        return PREFIX_UV + SPLIT + date;
    }

    // 区间UV
    public static String getUVKey(String startDate, String endDate) {
        return PREFIX_UV + SPLIT + startDate +SPLIT + endDate;
    }

    // 单日活跃用户
    public static String getDAUKey(String date) {
        return PREFIX_DAU + SPLIT + date;
    }

    // 区间活跃用户
    public static String getDAUKey(String startDate, String endDate) {
        return PREFIX_DAU + SPLIT + startDate + SPLIT + endDate;
    }

    // 帖子热度排行,统计帖子分数。
    public static String getPostScoreKey() {
        return PREFIX_POST + SPLIT + "score";
    }

}
